#include "StdAfx.h"
#include "cFire.h"
#include "d3dUtil.h"

cFire::cFire(D3DXVECTOR3* origin, int numParticle)
{
}
//////////////////////////////////////////////////////////////////////////
cFire::~cFire(void)
{
}
//////////////////////////////////////////////////////////////////////////
void cFire::resetParticle( Attribute* attribute )
{
	attribute->_isAlive = true;
	attribute->_position = _origin;
	D3DXVECTOR3 min  = D3DXVECTOR3(-1.f, -1.f, -1.f);
	D3DXVECTOR3 max = D3DXVECTOR3( 1.f,  1.f,  1.f);

	mSnow.GetRandomVector(
		&attribute->_velocity,
		&min,
		&max);

	D3DXVec3Normalize(
		&attribute->_velocity,
		&attribute->_velocity);

	attribute->_velocity *=100.f;

	attribute->_color = D3DXCOLOR(
		mSnow.GetRandomFloat(0.f, 1.f),
		mSnow.GetRandomFloat(0.f, 1.f),
		mSnow.GetRandomFloat(0.f, 1.f),
		1.f);

	attribute->_age = 0.f;
	attribute->_lifeTime = 2.f;
}
//////////////////////////////////////////////////////////////////////////
void cFire::update( float timeDelta )
{
	std::list<Attribute>::iterator i;

	for (i =  _particles.begin(); i!=_particles.end(); ++i)
	{
		if (i->_isAlive)
		{
			i->_position +=i->_velocity * timeDelta;

			i ->_age +=timeDelta;

			if (i->_age > i->_lifeTime)
				i->_isAlive = false;
		}
	}
}
//////////////////////////////////////////////////////////////////////////
void cFire::preRender()
{
	preRender();
	gd3dDevice->SetRenderState(D3DRS_SRCBLEND,  D3DBLEND_ONE);
	gd3dDevice->SetRenderState(D3DRS_DESTBLEND, D3DBLEND_ONE);

	gd3dDevice->SetRenderState(D3DRS_ZWRITEENABLE, false);
	
}
//////////////////////////////////////////////////////////////////////////
void cFire::postRender()
{
	postRender();

	gd3dDevice->SetRenderState(D3DRS_ZWRITEENABLE, true);
}
//////////////////////////////////////////////////////////////////////////